package com.qidianit.demo1;

/**
 * @author 戴着假发的程序员
 * @company 起点编程
 * @date 2025/7/25 15:25
 * @description
 */
public class Storage {
    private int count = 0;

    // 生产者给仓库放东西
    public synchronized void put(int i) {
        while (count != 0) {
            // 说明仓库有货，还不能生产
            try {
                // 生产者开始等待。仓库有货，不能生产
                this.wait(); // wait方法必须在同步方法中调用
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
        // 如果仓库有位置，就放入产品
        System.out.println(Thread.currentThread().getName() + ": 放入了一个产品：" + i);
        count = i;
        // 唤醒消费者来消费
        this.notifyAll();
        System.out.println("唤醒了消费者");
    }

    // 消费者从仓库中取东西
    public synchronized void take() {
        while (count == 0) {
            // 说明仓库没有货，不能消费
            try {
                // 消费者开始等待。仓库没有货，不能消费
                this.wait(); // wait方法必须在同步方法中调用
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
        System.out.println(Thread.currentThread().getName() + ": 取出了一个产品：" + count);
        count = 0;
        // 唤醒生产者来生产
        this.notifyAll();
        System.out.println("唤醒了生产者");
    }
}
